﻿Imports System.IO

Partial Public Class UserUpdate
    Inherits CoreClass

    Dim idUser As Integer = 0
    ' Gan gia tri cho bien MenuID de kiem tra quyen cua ng dung, gia tri nay lay trog DB va dc fix
    Dim chkMenu As Integer = getIDMenu(2)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            ' Set sự kiện submit cho nút chỉ định
            Page.Form.DefaultButton = btnUpdate.UniqueID
            idUser = Request.QueryString("id")
            If Not idUser > 0 Then
                Response.Redirect("/Inside/System/Group/UserManager.aspx")
            End If
            ' Luôn check quyền khi load trang
            chkPms((CInt(Session("GroupId").ToString())), chkMenu)
            If Not Page.IsPostBack Then
                If chkView = 1 Then
                    loadData()
                    loadGroup()
                    loadStt()
                    btnDelete.Attributes.Add("onclick", "return confirm('Bạn có chắc muốn xóa tài khoản này không?');")
                Else
                    'MsgBox(chkView & chkUpdate & chkDelete)
                    objAlert.ErrorBox(Page, "Bạn không có quyền truy xuất trang này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
                End If
            End If
        Catch ex As Exception
            Response.Redirect("/Inside/xLogin.aspx?redirect=" & Request.Url.PathAndQuery.Replace("?", "|"))
        End Try
    End Sub


#Region "Các sự kiện của grid và Button"

    Private Sub btnUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
        If chkUpdate = 1 Then
            ' Goi ham kiem tra Form
            If Not chkField() Then
                Exit Sub
            End If

            Dim fileImage As String = ""
            'Gọi Hàm upload Avatar va kiem tra
            fileImage = uploadAvatar()
            If fileImage = "False" Then
                Exit Sub
            End If

            Dim userName As String = ""
            Dim fullName As String = ""
            Dim phone As String = ""
            Dim mail As String = ""
            Dim birth As String = ""
            Dim idNumber As String = ""
            Dim address As String = ""
            Dim groupID As Integer = 0
            Dim stt As Integer = 0
            Dim resetPass As Boolean = False

            userName = txtUsername.Text
            fullName = txtFullname.Text
            phone = txtPhone.Text
            mail = txtEmail.Text
            birth = objFunction.convertDateVNtoOther(txtBirth.Text, "ymd")
            idNumber = txtIdentity.Text
            address = txtAddress.Text
            groupID = cbxGroup.SelectedValue
            stt = cbxStatus.SelectedValue
            resetPass = chkBoxReset.Checked
            Try
                sql = "spi_UserUpdate 'update', " & idUser & ", "
                sql &= objFunction.ValueCheck(groupID) & ","
                sql &= objFunction.FieldUniCk(userName) & ","
                If resetPass Then
                    sql &= objFunction.FieldCheck(objFunction.Hash("123456")) & ","
                Else
                    sql &= objFunction.FieldCheck("") & ","
                End If
                sql &= objFunction.FieldUniCk(mail) & ","
                sql &= objFunction.FieldUniCk(phone) & ","
                sql &= objFunction.FieldUniCk(objFunction.UnicodeToQuote(fullName)) & ","
                sql &= objFunction.FieldUniCk(objFunction.UnicodeToQuote(address)) & ","
                sql &= objFunction.FieldUniCk(birth) & ","
                sql &= objFunction.FieldUniCk(fileImage) & ","
                sql &= objFunction.FieldUniCk(idNumber) & ","
                sql &= objFunction.ValueCheck(cbxStatus.SelectedValue)
                objDataRead.ExeNonQuery(sql)
                objFunction.writeLog(Session("UserId"), 1, "Update thông tin người dùng", "User: " & userName, "Fullname: " & fullName)
                'Kiem tra neu la thay doi thong tin cua User dang login thi update Sesion FullName va image o banner
                If Session("UserId") = idUser Then
                    Session("UserFullname") = fullName
                    If Not fileImage = "" Then
                        Session("UserImg") = fileImage
                    End If
                End If
                Response.Redirect("UserManager.aspx")
            Catch ex As Exception
                If objConfig.Developer.Equals("1") Then
                    objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                      " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                      " --- Mess: " & ex.Message.Replace("'", """"))
                Else
                    objAlert.ErrorBox(Page, "Có lỗi trong quá trình update. <br><br>Hãy thông báo lại cho Admin.")
                End If
            End Try

        Else
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
        End If
    End Sub

    Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
        Response.Redirect("/Inside/System/User/UserManager.aspx")
    End Sub

    Private Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDelete.Click
        If chkDelete = 1 Then
            sql = "spi_UserDelete " & objFunction.ValueCheck(idUser)
            objDataRead.ExeNonQuery(sql)
            objFunction.writeLog(Session("UserId"), 0, "Xóa người dùng", txtUsername.Text, txtFullname.Text)
            Response.Redirect("UserManager.aspx")
        Else
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
        End If
    End Sub

    ' Xu ly su kien nut thay doi mat khau
    Private Sub btnChangePass_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnChangePass.Click
        Try
            idUser = Request.QueryString("id")
            Response.Redirect("UserChangePass.aspx?id=" & idUser)
        Catch ex As Exception

        End Try
    End Sub

#End Region


#Region "Các hàm tự viết"
    ' Lấy dự liệu đưa vào form
    Private Sub loadData()
        sql = "spi_UserGetByID " & idUser
        objDataRead.ExeReader(sql)
        If Not objDataRead.dataRead.Read Then
            objAlert.ErrorBox(Page, "Người dùng này không tồn tại trong hệ thống.")
            Exit Sub
        End If
        txtUsername.Text = objDataRead.dataRead("UserName").ToString
        txtFullname.Text = objFunction.QuoteToUnicode(objDataRead.dataRead("UserFullName").ToString)
        txtPhone.Text = objDataRead.dataRead("UserPhone").ToString
        txtEmail.Text = objDataRead.dataRead("UserEmail").ToString
        cbxStatus.SelectedValue = Integer.Parse(objDataRead.dataRead("UserStt").ToString)
        cbxGroup.SelectedValue = Integer.Parse(objDataRead.dataRead("GroupID").ToString)
        Dim d As Date = Date.Parse(objDataRead.dataRead("UserBirth").ToString)
        Dim strD As String
        If d.Day < 10 Then
            strD = "0" & d.Day
        Else
            strD = d.Day
        End If
        If d.Month < 10 Then
            strD &= "/0" & d.Month
        Else
            strD &= "/" & d.Month
        End If
        strD &= "/" & d.Year
        txtBirth.Text = strD
        txtIdentity.Text = objDataRead.dataRead("UserIdCard").ToString
        txtAddress.Text = objFunction.QuoteToUnicode(objDataRead.dataRead("UserAddress").ToString)
        If objDataRead.dataRead("UserImg").ToString = "" Then
            Image1.ImageUrl = "~/Inside/images/noAva.gif"
        Else
            Image1.ImageUrl = "~/Inside/images/avatar/" & objDataRead.dataRead("UserImg").ToString
        End If

    End Sub

    ' Lấy dữ liệu vào ComboBox Status
    Private Sub loadStt()
        Try
            cbxStatus.DataTextField = "CodeDesc"
            cbxStatus.DataValueField = "CodeValue"
            cbxStatus.DataSource = objData.ExeDataset("spi_StatusGet")
            cbxStatus.DataBind()
            cbxStatus.Items.Insert(0, New ListItem("-- No Filter --", "-1"))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Có lỗi khi Load module Trạng Thái. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            End If
        End Try
    End Sub

    ' Lấy dữ liệu vào ComboBox Group
    Private Sub loadGroup()
        Try
            cbxGroup.DataTextField = "GroupName"
            cbxGroup.DataValueField = "GroupID"
            sql = "spi_GroupGet "
            sql &= "'',"
            sql &= "1"
            cbxGroup.DataSource = objData.ExeDataset(sql)
            cbxGroup.DataBind()
            cbxGroup.Items.Insert(0, New ListItem("-- All Group --", "-1"))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Có lỗi khi Load module liệt kê Nhóm. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            End If
        End Try
    End Sub

    ' Kiểm tra dữ liệu nhập trên Form
    Public Function chkField() As Boolean
        Dim flag = True

        If txtUsername.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập giá trị cho mục Username.")
            Return flag
        End If
        If Not objFunction.IsAlphaNumeric(txtUsername.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Username chỉ bao gồm các chữ cái: A-Z, a-z, 0-9 và không có khoảng trống.")
            Return flag
        End If

        If txtFullname.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập tên đầy đủ của người dùng.")
            Return flag
        End If

        If txtPhone.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập số điện thoại của người dùng.")
            Return flag
        End If
        If Not objFunction.IsNumber(txtPhone.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Số điện thoại chỉ gồm chữ số: 0-9 và không có khoảng trống.")
            Return flag
        End If

        If txtIdentity.Text = "" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy nhập số chứng minh thư của người dùng.")
            Return flag
        End If
        If Not objFunction.IsNumber(txtIdentity.Text) Then
            flag = False
            objAlert.ErrorBox(Page, "Số chứng minh thư chỉ gồm chữ số: 0-9 và không có khoảng trống.")
            Return flag
        End If

        If cbxGroup.SelectedValue = "" Or cbxGroup.SelectedValue = "-1" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy chọn nhóm cho người dùng.")
            Return flag
        End If

        If cbxStatus.SelectedValue = "" Or cbxStatus.SelectedValue = "-1" Then
            flag = False
            objAlert.ErrorBox(Page, "Hãy chọn giá trị Trạng Thái cho đúng.")
            Return flag
        End If

        

        Return flag
    End Function

    ' Hàm kiểm tra file và upload file
    Private Function uploadAvatar() As String
        If uplAvatar.HasFile Then
            Try
                If uplAvatar.PostedFile.ContentType = "image/jpeg" Or uplAvatar.PostedFile.ContentType = "image/gif" Then
                    If uplAvatar.PostedFile.ContentLength < 552400 Then
                        Dim filename As String = Path.GetFileName(uplAvatar.FileName)
                        filename = objFunction.GetUploadFileName(Server.MapPath("~/Inside/images/avatar/"), filename)
                        uplAvatar.SaveAs(Server.MapPath("~/Inside/images/avatar/") & filename)
                        Return filename
                    Else
                        objAlert.ErrorBox(Page, "File upload phải nhỏ hơn 500kB.")
                        Return "False"
                    End If
                Else
                    objAlert.ErrorBox(Page, "Bạn chỉ được upload file ảnh định dạng: JPEG, GIF.")
                    Return "False"
                End If
            Catch ex As Exception
                If objConfig.Developer.Equals("1") Then
                    objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                      " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                      " --- Mess: " & ex.Message.Replace("'", """"))
                Else
                    objAlert.ErrorBox(Page, "Có lỗi trong quá trình Upload Avatar. <br><br>Hãy thông báo lại cho Admin.")
                End If
                Return "False"
            End Try
        Else
            Return ""
        End If
    End Function

#End Region




    
End Class